﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using VentaElectrodomesticos.AbmUsuario;
using VentaElectrodomesticos.Sql;
using System.Data.SqlClient;
using VentaElectrodomesticos.AbmCliente;
using VentaElectrodomesticos.Utilities;

namespace VentaElectrodomesticos.EfectuarPago
{
    public partial class FormEfectuarPago : Form
    {
        private ClaseSQL sql;
        private String idUsuario;
        private String[,] facturas;
        private int cantidadFacturas;
        private Cliente unCliente;

        public FormEfectuarPago(String idUsuario)
        {
            InitializeComponent();
            this.idUsuario = idUsuario;
            Usuario usuario = new Usuario();
            sql = new ClaseSQL();
            sql.llenarComboSimple(this.comboBoxProvincias,"SELECT nomProvincia FROM LAG.provincias");
            sql.llenarComboSimple(this.comboBoxSucursal, "SELECT idSucursal FROM LAG.sucursales");
            this.asignarUsuario();
        }

        private void asignarUsuario() { 
            try{
            sql.Open();
            String defaultquery = "SELECT a.idTipoUsu,c.nomProvincia,a.idSucursal FROM LAG.usuarios a ";
            defaultquery += " LEFT JOIN LAG.personas b ON a.idPersona = b.idPersona";
            defaultquery += " LEFT JOIN LAG.provincias c ON c.idProvincia = b.idProvincia";
            defaultquery += " WHERE idUsuario = " + this.idUsuario;
                SqlDataReader reader = sql.busquedaSQLDataReader(defaultquery);
                if (reader != null)
                {
                    reader.Read();
                    this.comboBoxProvincias.SelectedItem = reader[1].ToString();
                    this.comboBoxSucursal.SelectedItem = reader[2].ToString();
                    if (reader[0].ToString() == "2")
                    {
                        this.comboBoxProvincias.Enabled = true;
                        this.comboBoxSucursal.Enabled = true;
                    }
                    else
                    {
                        this.comboBoxProvincias.Enabled = false;
                        this.comboBoxSucursal.Enabled = false;

                    }
                }
                reader.Close();
            }
            catch (SqlException ex)
            {
                MessageBox.Show(ex.Message, "Error!");
            }
            finally
            {
                sql.Close();
            }

        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (this.textBoxCuotasAPagar.Text != "" && this.textBoxCuotasRestantes.Text != ""
                    && this.textBoxImporteTotal.Text != "" && this.textBoxCuotasAPagar.Text != ""
                    && this.comboBoxSucursal.SelectedIndex != -1 && this.idUsuario != null)
            {
                if (System.Convert.ToDecimal(this.textBoxCuotasAPagar.Text) - System.Convert.ToDecimal(this.textBoxCuotasRestantes.Text) <= 0
                    && System.Convert.ToDecimal(this.textBoxCuotasAPagar.Text) > 0)
                {
                    String mensaje = "Seguro quiere realizar el pago de " + this.textBoxCuotasAPagar.Text;
                    mensaje += " cuotas correspondientes al pago de la factura " + this.comboBoxFactura.SelectedItem.ToString();
                    mensaje += " con un importe de " + this.textBoxImporteTotal.Text;
                    DialogResult respuesta = MessageBox.Show(mensaje, "Confirmación de Pago", MessageBoxButtons.OKCancel);
                    if (respuesta == DialogResult.OK)
                    {
                        try
                        {
                            sql.Open();
                            String defaultquery = "INSERT INTO LAG.pagos VALUES (getdate()," + this.textBoxImporteTotal.Text.Replace(",", ".");
                            defaultquery += "," + this.textBoxCuotasAPagar.Text + "," + this.comboBoxFactura.SelectedItem.ToString();
                            defaultquery += "," + this.comboBoxSucursal.SelectedItem.ToString() + "," + this.idUsuario + ");";
                            SqlDataReader reader = sql.busquedaSQLDataReader(defaultquery);
                            if (reader != null)
                            {
                                MessageBox.Show("El pago fue registrado con éxito", "Success");
                                this.Close();
                            }
                        }
                        catch (SqlException ex)
                        {
                            MessageBox.Show(ex.Message + "\n" + ex.StackTrace, "Error!");
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message + "\n" + ex.StackTrace, "Error app");
                        }
                        finally
                        {
                            sql.Close();
                            this.Close();
                        }
                    }
                }
                else 
                {
                    MessageBox.Show("La cantidad de cuotas a pagar debe ser un numero entre 1 y las cuotas pendientes de pago", "Advertencia"); 
                }
            }
            else
            {
                MessageBox.Show("Faltan datos", "Advertencia");
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void buttonBuscar_Click(object sender, EventArgs e)
        {
            FormSeleccionCliente formSeleccionCliente = new FormSeleccionCliente(this, "pago", false);
            formSeleccionCliente.ShowDialog();
        }

        public void recibirCliente(Cliente cliente)
        {
            this.unCliente = cliente;

            comboBoxFactura.Items.Clear();
            Utils.ClearTextBoxes(this);

            textBoxDniCliente.Text = cliente.dni;
            textBoxNombreCliente.Text = cliente.nombre;
            textBoxApellidoCliente.Text = cliente.apellido;

            

            llenarFacturas(cliente.id.ToString());
        }

        private void llenarFacturas(String idCliente)
        {

            try
            {
                sql.Open();

                String[,] parametros = new String[2, 1];
                String sp = "LAG.sp_facturasPendientes";
                parametros[0, 0] = "@idCliente";
                parametros[1, 0] = idCliente;
                SqlDataReader reader = sql.ejecutarStoredProcedure(sp, parametros);
                this.facturas = new String[3, 5000];
                int i = 0;
                while (reader.Read())
                {
                    this.facturas[0, i] = reader["nroFactura"].ToString(); //nroFactura
                    this.facturas[1, i] = reader["cuotasRestantes"].ToString(); //cuotasPendientes
                    this.facturas[2, i] = reader["valorCuota"].ToString(); //valorCuota
                    this.comboBoxFactura.Items.Add(this.facturas[0, i]);
                    i += 1;

                }
                this.cantidadFacturas = i;
                this.comboBoxFactura.SelectedIndex = -1;
            }
            catch (SqlException ex)
            {
                MessageBox.Show(ex.Message + "\n" + ex.StackTrace, "Error!");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "\n" + ex.StackTrace, "Error app");
            }
            finally
            {
                sql.Close();
            }

            /*
            while (query.Read())
            {
                String factura = query[0].ToString();
                combo.Items.Add(factura);
            }
            query.Close();
*/
        }

        private void comboBoxFactura_SelectedIndexChanged(object sender, EventArgs e)
        {
            int i;
            if (this.comboBoxFactura.SelectedIndex != -1)
            {

                for (i = 0; i < this.cantidadFacturas; i++)
                {

                    if (this.comboBoxFactura.SelectedItem.Equals(facturas[0, i]))
                    {
                        this.textBoxCuotasRestantes.Text = facturas[1, i];
                        this.textBoxImporteCuota.Text = facturas[2, i];
                    }
                }
                calcularTotal();
            }
        }

        private void textBoxCuotasAPagar_TextChanged(object sender, EventArgs e)
        {
            calcularTotal();
        }

        private void calcularTotal()
        {
            if (this.textBoxCuotasAPagar.Text != "" 
                && (this.textBoxCuotasAPagar.Text).CompareTo(this.textBoxCuotasRestantes.Text) <= 0)
            {
                this.textBoxImporteTotal.Text = System.Convert.ToString(System.Convert.ToDecimal(this.textBoxCuotasAPagar.Text) * System.Convert.ToDecimal(this.textBoxImporteCuota.Text));
            }
        }

        private void ingresarSoloNumericos(object sender, KeyPressEventArgs e)
        {
            if (!System.Text.RegularExpressions.Regex.IsMatch(e.KeyChar.ToString(), "[0-9\b]+"))
                e.Handled = true;
        }
    }
}
